package jay.home.bet.domain.logic;

import java.util.List;
import java.util.Map;

import jay.home.bet.domain.Item;
import jay.home.bet.domain.Order;
import jay.home.bet.domain.User;

public interface OrderService {

  Order getOrder(String id);

  List<Order> getOrders(int page, int range);

  List<Order> getOrdersByUser(String username, int page, int range);

  List<Order> getOrdersByComp(String compid, int page, int range);

  void updateOrder(Order order);

  void insertOrder(Order order, User user);
  
  /**
   * 如果投注不是在过关里的， guoguan应为false<br/>
   * 生成一个投注项, 根据eventid和oddtype自动获取一个投注项应有的信息, 包括odds, cat...见items字段.<br/>
   * 需要注意的是, 如果这个order的items里面已经有某个赛事的下注信息, 则新加入order的item不能加入到order里面, 即不允许在一场赛事上面下注大于一.<br/>
   * 原理:<br/>
   * <code>
   * Order order = new Order();<br/>
   * getOrderService().generateOrderItem(order, "3333", "dx_half_home");<br/>
   * </code>
   * 这里通过后面两个参数可以获知用户是下注到"3333"这个赛事上面. 大小玩法里面的半场玩法.下注在主队上面.根据"3333"可以查到相应的赔率的值.并且item是属于order(参数)的<br/>
   * 这样一个{@code Item}所需要的信息就全部具备了.
   */
  Item generateOrderItem(Order order, String eventid, String oddType, boolean guoguan, boolean gunqiu);
  
  Order newOrder(String username, Boolean isDanshi);
  
  void settleByComp(String compid, String full, String half);

	List<Order> getTodayOrdersByUser(String username, int page, int range);

	List<Order> getTodayOrders(int page, int range);

	List<Order> getOrdersByEventAndOdd(String eventid, String oddtype, int page, int range);
	
	List<Map> getSatistic();

	/**
	 * 获取用户尚未结算的所有注单.
	 * @return
	 */
	List<Order> getUserAliveOrders(String username);

	void deleteOrder(Order order);
}